package com.example.warehouse.sys.dao.persist.respository;

import com.example.warehouse.common.pojo.vo.PageData;
import com.example.warehouse.sys.pojo.entity.SysDept;
import com.example.warehouse.sys.pojo.entity.SysUser;
import com.example.warehouse.sys.pojo.vo.DeptListItemVO;
import com.example.warehouse.sys.pojo.vo.DeptStandardVO;

import java.util.List;

public interface IDeptRepository {
    /**
     * 插入部门数据
     *
     * @param dept 部门数据
     * @return 受影响的行数
     */
    int insert(SysDept dept);


    /**
     * 根据ID删除标签数据
     *
     * @param id 尝试删除的标签的ID
     * @return 受影响的行数
     */
    int deleteById(Long id);

    /**
     * 根据ID修改部门数据
     *
     * @param dept 封装了被修改数据的ID和新数据的对象
     * @return 受影响的行数
     */
    int updateById(SysDept dept);

    /**
     * 根据名称统计部门数量，通常用于检查名称是否被占用
     *
     * @param name 部门
     * @return 匹配此部门名称的数据的数量
     */
    int countByName(String name);

    /**
     * 统计匹配名称查不匹配ID的部门数量，通常用于修改数据时判断名称是否被占用
     *
     * @param id   部门ID
     * @param name 部门数量
     * @return 匹配的部门的数量
     */
    int countByNameAndNotId(Long id, String name);

    DeptStandardVO getStandardById(Long id);


    PageData<DeptListItemVO> list(Integer pageNum, Integer pageSize);

    /**
     * 根据父级类别查询其子级类别列表
     *
     * @param parentId 父级类别的ID
     * @param pageNum  页码
     * @param pageSize 每页记录数
     * @return 类别列表
     */
    PageData<DeptListItemVO> listByParentId(Long parentId, Integer pageNum, Integer pageSize);

    /**
     * 查询所有数据
     *
     */
    List<SysDept> selectAll();
}
